/*
 * ArchivoCSV.cpp
 *
 *  Created on: 10/12/2013
 *      Author: gonzalo
 */

#include "ArchivoCSV.h"
#include "../common/StringUtils.h"

using namespace std;

ArchivoCSV::ArchivoCSV(string file, char delim): ArchivoTexto(file, false) {
	this->delim = delim;
}

bool ArchivoCSV::csvRow(vector<string> &vector) {
	string linea;
	if (leerLinea(linea)) {
		vector = StringUtils::splitString(linea, this->delim);
		return true;
	}
	return false;
}

vector<string> ArchivoCSV::getRowByCols(int n1, string search1, int n2, string search2) {
	vector<string> vec;
	unsigned int nCols;
	if (n1 >= 0 && n2 >= 0) {
		irAlPrincipio();
		while(csvRow(vec)) {
			nCols = vec.size();
			if (n1 < nCols && n2 < nCols) {
				if ((vec[n1].compare(search1) == 0) && (vec[n2].compare(search2) == 0)) {
					return vec;
				}
			}
			vec.clear();
		}
	}
	vec.clear();
	return vec;
}

vector<string> ArchivoCSV::getRowByCol(int n, string search) {
	vector<string> vec;
	unsigned int nCols;
	if (n >= 0) {
		irAlPrincipio();
		while(csvRow(vec)) {
			nCols = vec.size();
			if (n < nCols) {
				if (vec[n].compare(search) == 0) {
					return vec;
				}
			}
			vec.clear();
		}
	}
	vec.clear();
	return vec;
}

vector<string> ArchivoCSV::getRowByField(string field,string search) {
	return getRowByCol(this->getColByName(field), search);
}

int ArchivoCSV::getColByName(string name) {
	vector<string> vec;
	irAlPrincipio();
	int pos = -1;
	if (csvRow(vec)) {
		for(int i = 0; i < vec.size(); i++) {
			if (vec[i].compare(name) == 0){
				pos = i;
			}
		}
	}
	return pos;
}

std::vector<std::string> ArchivoCSV::getRowByFields(std::string field1,
		std::string search1, std::string field2, std::string search2) {

	return this->getRowByCols(
			this->getColByName(field1),
			search1,
			this->getColByName(field2),
			search2
	);
}

ArchivoCSV::~ArchivoCSV() {
}
